package cn.iocoder.yudao.module.tms.dal.mysql.statistics;

import cn.iocoder.yudao.module.tms.controller.admin.statistics.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * TMS统计分析 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface StatisticsMapper {

    /**
     * 查询Band使用统计
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return Band使用统计列表
     */
    List<BandUsageStatisticsVO> selectBandUsageStatistics(@Param("startTime") LocalDateTime startTime,
                                                           @Param("endTime") LocalDateTime endTime);

    /**
     * 查询Band查验统计
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return Band查验统计列表
     */
    List<BandInspectionStatisticsVO> selectBandInspectionStatistics(@Param("startTime") LocalDateTime startTime,
                                                                     @Param("endTime") LocalDateTime endTime);

    /**
     * 查询订单查验统计
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 订单查验统计列表
     */
    List<OrderInspectionStatisticsVO> selectOrderInspectionStatistics(@Param("startTime") LocalDateTime startTime,
                                                                       @Param("endTime") LocalDateTime endTime);

    /**
     * 查询客户合作统计
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 客户合作统计列表
     */
    List<CustomerCooperationStatisticsVO> selectCustomerCooperationStatistics(@Param("startTime") LocalDateTime startTime,
                                                                               @Param("endTime") LocalDateTime endTime);

    /**
     * 查询统计概览
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 统计概览
     */
    StatisticsOverviewVO selectStatisticsOverview(@Param("startTime") LocalDateTime startTime,
                                                   @Param("endTime") LocalDateTime endTime);
}
